/* Contexto es el entorno en el cual se desarrolla la operacion actual.
 * Al ser un Compresor Aritmetico de orden uno, el contexto sera representado por un valor ascii.
 * Este valor es el que lo distingue de los demas contextos.
 * Un contexto tendrá una lista con todos los simbolos que tengan frecuancia mayor a uno, es decir,
 * solo se agregaran a a la lista aquellos caracteres que aparezcan al menos una vez a continuacion del caracter que caracteriza al contexto.
 * Se cuanta tambien con una frecuencia acumulada, que es la suma de todas las frecuencias de los
 * simbolos de este contexto.
 * */

#include "Simbolo.h"
#include <vector>
#include "../Constantes.h"

#ifndef CONTEXTO_H_
#define CONTEXTO_H_

class Contexto {
private:

	/*Caracter que distingue al contexto*/
	char valorAscii;

	/*Vector de simbolos que aparecen en este contexto*/
	std::vector<Simbolo> simbolos;

	/*Frecuancia total de todos los simbolos*/
	cantBytes frecuenciaAcumulada;

public:

	Contexto(char valorAscii);

	virtual ~Contexto();

	cantBytes getFrecuenciaAcumulada();

	/* Se retorna la frecuancia del simbolo que se pasa por parametro,
	 * dividida por la frecuanciaAcumulada del contexto:
	 * Esto es la probabilidad de hayar este caracter dentro del contexto. */
	float getProbabilidad(char simbolo);

	char getValorAscii();

	/*Se suma uno a la frecuancia del simbolo pasado por parametro*/
	void actualizarFrecuencia(char simbolo);

	bool operator<(const Contexto& contexto) const;

	bool operator==(const Contexto& contexto) const;

	/*Se imprime por pantalla los datos del contexto actual*/
	void imprimir();
};

#endif /* CONTEXTO_H_ */
